package com.ssy.lingxi.order.service.web;

import com.ssy.lingxi.common.response.Wrapper;
import com.ssy.lingxi.order.model.vo.basic.request.OrderDayParamVO;
import com.ssy.lingxi.order.model.vo.basic.request.OrderDeliveryTimeVO;
import com.ssy.lingxi.order.model.vo.basic.request.OrderShopIdVO;
import com.ssy.lingxi.order.model.vo.basic.response.OrderDayVO;
import com.ssy.lingxi.order.model.vo.basic.response.OrderDeliveryDateVO;
import com.ssy.lingxi.order.model.vo.basic.response.OrderTimeVO;
import org.springframework.http.HttpHeaders;

import java.util.List;

/**
 * @menu 系统能力 - 订单时间参数配置相关接口
 * @author wyx
 * @version 2.0.0
 * @date 2021-10-13
 */
public interface IOrderTimeParamService {
    /**
     * 查看自动确认收货时间
     * @param headers HttpHeaders信息
     * @return 查询结果
     */
    Wrapper<List<OrderDayVO>> getReceiverDay(HttpHeaders headers);

    /**
     * 添加/修改自动确认收货时间
     * @param headers HttpHeaders信息
     * @param updateVO 接口参数
     * @return 修改结果
     */
    Wrapper<Void> updateReceiverDay(HttpHeaders headers, List<OrderDayParamVO> updateVO);

    /**
     * 查看送货预约时长
     * @param headers HttpHeaders信息
     * @return 查询结果
     */
    Wrapper<List<OrderDayVO>> getAppointmentDay(HttpHeaders headers);

    /**
     * 添加/修改送货预约时长
     * @param headers HttpHeaders信息
     * @param updateVO 接口参数
     * @return 修改结果
     */
    Wrapper<Void> updateAppointmentDay(HttpHeaders headers, List<OrderDayParamVO> updateVO);

    /**
     * 查看配置配送时间段
     * @param headers HttpHeaders信息
     * @return 查询结果
     */
    Wrapper<List<OrderTimeVO>> getDeliveryTime(HttpHeaders headers);

    /**
     * 添加/修改配置配送时间段
     * @param headers  HttpHeaders信息
     * @param updateVO 接口参数
     * @return 修改结果
     */
    Wrapper<Void> updateDeliveryTime(HttpHeaders headers, List<OrderDeliveryTimeVO> updateVO);

    /**
     * 根据会员信息和商城id获取预约时长和配置配送时间段
     * @param headers HttpHeaders信息
     * @param shopIdVO 接口参数
     * @return 查询结果
     */
    Wrapper<OrderDeliveryDateVO> findDeliveryDate(HttpHeaders headers, OrderShopIdVO shopIdVO);

    /**
     * 根据供应商会员信息和商城id获取预约时长和配置配送时间段
     * @param vendorMemberId 供应商会员id
     * @param vendorRoleId 供应商会员角色id
     * @param shopId 商城id
     * @return 查询结果
     */
    Wrapper<OrderDeliveryDateVO> findBuyerDeliveryDate(Long vendorMemberId, Long vendorRoleId, Long shopId);

    /**
     * 查询自动确认收货时间
     * @param vendorMemberId 供应商会员Id
     * @param vendorRoleId 供应商会员角色Id
     * @param shopId 订单来源商城Id
     * @return 自动确认收货天数（如无配置返回0）
     */
    Integer getReceiveDays(Long vendorMemberId, Long vendorRoleId, Long shopId);
}
